#include<bits./stdc++.h>
using namespace std;
const int maxn=100005;
const long long p=998244353;
int n,m;
long long f[maxn][125];
int tot;
struct node{
    int op[6];
    bool operator<(const node &ss)const{
		return op[1]<ss.op[1];
	} 
}s;
node a[150];
map<int,int> mp;
void dfs0(int x){
    if(x>n){
        a[++tot]=s;
        mp[s.op[1]*10000+s.op[2]*1000+s.op[3]*100+s.op[4]*10+s.op[5]]=tot;
        return;
    }
    for(int i=1;i<=n;i++){
        if(s.op[i]==0){
            s.op[i]=x;
            dfs0(x+1);
            s.op[i]=0;
        }
    }
}
int main(){
    freopen("drama.in","r",stdin);
    freopen("drama.out","w",stdout);
    for(int i=0;i<6;i++){
    	s.op[i]=0;
    	for(int j=0;j<150;j++){
    		a[j].op[i]=0;
		}
	}
    cin>>n>>m;
    dfs0(1);
    f[0][1]=1LL;
    for(int i=0;i<m;i++){
        for(int j=1;j<=tot;j++){
            for(int k=1;k<=n;k++){
                for(int w=2;w<=k;w++){
                    s.op[w-1]=a[j].op[w];
                }
                s.op[k]=a[j].op[1];
                for(int w=k+1;w<=n;w++){
                	s.op[w]=a[j].op[w];
				}
                f[i+1][mp[s.op[1]*10000+s.op[2]*1000+s.op[3]*100+s.op[4]*10+s.op[5]]]=(f[i+1][mp[s.op[1]*10000+s.op[2]*1000+s.op[3]*100+s.op[4]*10+s.op[5]]]+f[i][j])%p;
            }
            //cout<<i<<" "<<j<<" "<<f[i][j]<<endl;
        }
    }
    //s.op[1]=1,s.op[2]=2,s.op[3]=3;
    //cout<<mp[s.op[1]*10000+s.op[2]*1000+s.op[3]*100+s.op[4]*10+s.op[5]]<<" ";
    cout<<f[m][1];
    return 0;
}
